/******************************************************************************* * Copyright (c) 2003, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Lars Vogel <Lars.Vogel@gmail.com> - Bug 422040 *******************************************************************************/ package org.eclipse.ui.internal.progress; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.IWorkbenchHelpContextIds; import org.eclipse.ui.internal.WorkbenchImages; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.preferences.ViewPreferencesAction; /** * The ProgressView is the class that shows the details of the current workbench * progress. */ public class ProgressView extends ViewPart { DetailedProgressViewer viewer; Action cancelAction; Action clearAllAction; @Override public void createPartControl(Composite parent) { viewer = new DetailedProgressViewer(parent, SWT.MULTI | SWT.H_SCROLL); viewer.setComparator(ProgressManagerUtil.getProgressViewerComparator()); viewer.getControl().setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true)); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IWorkbenchHelpContextIds.RESPONSIVE_UI); initContentProvider(); createClearAllAction(); createCancelAction(); initContextMenu(); initPulldownMenu(); initToolBar(); getSite().setSelectionProvider(viewer); } @Override public void setFocus() { if (viewer != null) { viewer.setFocus(); } } /** * Sets the content provider for the viewer. */ protected void initContentProvider() { ProgressViewerContentProvider provider = new ProgressViewerContentProvider(viewer, true ,true); viewer.setContentProvider(provider); viewer.setInput(ProgressManager.getInstance()); } /** * Initialize the context menu for the receiver. */ private void initContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ Menu menu = menuMgr.createContextMenu(viewer.getControl()); menuMgr.add(cancelAction); menuMgr.addMenuListener(manager -> { JobInfo info = getSelectedInfo(); if (info == null) { return; } }); menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); getSite().registerContextMenu(menuMgr, viewer); viewer.getControl().setMenu(menu); } private void initPulldownMenu() { IMenuManager menuMgr = getViewSite().getActionBars().getMenuManager(); menuMgr.add(clearAllAction); menuMgr.add(new ViewPreferencesAction() { @Override public void openViewPreferencesDialog() { new JobsViewPreferenceDialog(viewer.getControl().getShell()) .open(); } }); } private void initToolBar() { IActionBars bars = getViewSite().getActionBars(); IToolBarManager tm = bars.getToolBarManager(); tm.add(clearAllAction); } /** * Return the selected objects. If any of the selections are not JobInfos or * there is no selection then return null. * * @return JobInfo[] or <code>null</code>. */ private IStructuredSelection getSelection() { // If the provider has not been set yet move on. ISelectionProvider provider = getSite().getSelectionProvider(); if (provider == null) { return null; } ISelection currentSelection = provider.getSelection(); if (currentSelection instanceof IStructuredSelection) { return (IStructuredSelection) currentSelection; } return null; } /** * Get the currently selected job info. Only return it if it is the only * item selected and it is a JobInfo. * * @return JobInfo */ JobInfo getSelectedInfo() { IStructuredSelection selection = getSelection(); if (selection != null && selection.size() == 1) { JobTreeElement element = (JobTreeElement) selection .getFirstElement(); if (element.isJobInfo()) { return (JobInfo) element; } } return null; } /** * Create the cancel action for the receiver. */ private void createCancelAction() { cancelAction = new Action(ProgressMessages.ProgressView_CancelAction) { @Override public void run() { viewer.cancelSelection(); } }; } /** * Create the clear all action for the receiver. */ private void createClearAllAction() { clearAllAction = new Action( ProgressMessages.ProgressView_ClearAllAction) { @Override public void run() { FinishedJobs.getInstance().clearAll(); } }; clearAllAction .setToolTipText(ProgressMessages.NewProgressView_RemoveAllJobsToolTip); ImageDescriptor id = WorkbenchImages .getWorkbenchImageDescriptor("/elcl16/progress_remall.png"); //$NON-NLS-1$ if (id != null) { clearAllAction.setImageDescriptor(id); } id = WorkbenchImages .getWorkbenchImageDescriptor("/dlcl16/progress_remall.png"); //$NON-NLS-1$ if (id != null) { clearAllAction.setDisabledImageDescriptor(id); } } /** * @return Returns the viewer. */ public DetailedProgressViewer getViewer() { return viewer; } }